home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Magazin: Amiga-CD 1996 November & December
/
Amiga-CD 1996 #11-12.iso
/
pd-disketten
/
ungepackt
/
8_95
/
apd-8-95-2
/
arexx duett
/
assemble_basm.ged
next >
Wrap
Text File
|
1996-01-22
|
11KB
|
340 lines
/* Assemble the source in the current window of GoldEd using BAsm.
**
** This ARexx script assembles the source found in the currently
** active window of GoldEd (which activates this script).
**
** Written and copyright in 1995 by Ulrich Flegel.
** All rights are reserved to the author Ulrich Flegel.
**
** The "Amiga Magazin" magazine has permission to distribute this script on the
** service disk of the june issue 1995. No other person or distributor is allowed
** to distribute this source without written permission from the author.
**
** system requirements:
** NextError_BAsm.ged (V1.0 or higher)
** GoldEd (V2.20 or higher)
** BAsm (V1.123 or higher)
** Run (AmigaOS release)
** WaitForPort (ARexx release)
** rx (ARexx release)
**
** current version of this script:
**
** $VER: Assemble_BAsm.ged V1.0 (09-May-95)
**
** usage:
** call as ARexx Macro from GoldEd as: Assemble_BAsm.ged BAsmOptions
** Exmaple BAsmOptions: -O+ -OW+
*/
/*============================================================================*/
OPTIONS RESULTS /* enable return codes */
/*============================================================================*/
/* parameters used to control this program */
/* Assemble_BAsm.ged BAsmOptions */
ARG BAsmOptions
/*============================================================================*/
/* adapt the following variables to your system environment: */
NextError = 'GoldEd:ARexx/NextError_BAsm.ged' /* here substitute the complete path/name of the NextError_BAsm.ged script */
LaunchCmd = 'C:Run >NIL:' /* here substitute the command line how to launch HamLab in background */
BAsmPath = 'Work:Programming/Assembler/Barfly/' /* here substitute the path where to find HamLabPlus */
BAsmName = 'BAsm' /* here substitute the name you gave HamLabPlus */
BAsmStartup = '-A' /* here substitute the startup option needed to make BAsm listen to it's port */
TempPath = 'T:' /* here substitute the path where temporary data is to store */
/*============================================================================*/
BAsmError_Max = 200
BAsmError_OK = 0
BAsmError_False = 20
BAsmError_OpenError = 1
BAsmError_SourceError = 2
BAsmError_ReadError = 3
BAsmError_UnknownOption = 4
BAsmError_MemoryError = 5
BAsmError_NoSourceFile = 6
BAsmError_NoNextError = 7
BAsmError_NoErrorList = 8
BAsmError_NoNextWarning = 9
BAsmError_NoWarningList = 10
/*============================================================================*/
/* ARexx ports used */
Port_BAsm='rexx_BASM'
Port_GoldEd=ADDRESS()
IF (LEFT(Port_GoldEd, 6) ~= 'GOLDED') THEN /* not started by GoldEd ? */
Port_GoldEd='GOLDED.1'
/*============================================================================*/
ScriptErrorLevel = 6
SIGNAL ON SYNTAX /* ensure clean exit */
IF ~ SHOW('P', Port_GoldEd) THEN /* is GoldEd AREXX port available ? */
DO
Say 'This script may only called by GoldEd!'
END
ELSE
DO
ADDRESS VALUE Port_GoldEd
OPTIONS FAILAT 21
'LOCK CURRENT' /* lock GUI, gain access */
OPTIONS FAILAT ScriptErrorLevel /* ignore warnings */
/*============================================================================*/
/*
** Non localized strings used
*/
STRING_ThisScript='Assemble_BAsm.ged'
/*
** Localization of strings used
*/
ADDRESS VALUE Port_GoldEd
'QUERY CAT'
Language=RESULT
SELECT
WHEN Language='deutsch' THEN
DO
STRING_Positive='OK'
STRING_Negative='Abbrechen'
STRING_Dismiss='Aufgeben'
STRING_BAsmFailure_Title='BAsm Fehler-Report'
ERROR_NoSource='Kein Source vorhanden!'
ERROR_NoBAsm="'"||BAsmPath||BAsmName||"' konnte nicht gefunden werden!"
ERROR_BAsmWarnings='Assemblierung mit Warnungen abgeschlossen.'
ERROR_BASM_UnknownErrorCode='Ein unbekannter Fehler ist aufgetreten!'
ERROR_BASM_OK='Assemblierung erfolgreich abgeschlossen.'
ERROR_BASM_False='Assemblierung aufgrund von Fehlern abgebrochen!'
ERROR_BASM_OpenError='Datei konnte nicht gefunden werden!'
ERROR_BASM_SourceError='Source Datei ist KEIN ASCII!'
ERROR_BASM_ReadError='Datei Lesefehler!'
ERROR_BASM_UnknownOption='Unbekannte BAsm Option(en) angegeben: '||BAsmOptions||'!'
ERROR_BASM_MemoryError='Nicht genug Speicher!'
ERROR_BASM_NoSourceFile='Keine Source Datei angegeben!'
END
/*
WHEN Language='XXX' THEN
DO
STRING_Positive='XXX'
STRING_Negative='XXX'
STRING_Dismiss='XXX'
STRING_BAsmFailure_Title='XXX'
ERROR_NoSource='XXX!'
ERROR_NoBAsm="'"||BAsmPath||BAsmName||"'XXX!"
ERROR_BAsmWarnings='XXX.'
ERROR_BASM_UnknownErrorCode='XXX!'
ERROR_BASM_OK='XXX!'
ERROR_BASM_False='XXX!'
ERROR_BASM_OpenError='XXX!'
ERROR_BASM_SourceError='XXX!'
ERROR_BASM_ReadError='XXX!'
ERROR_BASM_UnknownOption='XXX: '||BAsmOptions||'!'
ERROR_BASM_MemoryError='XXX!'
ERROR_BASM_NoSourceFile='XXX!'
END
*/
OTHERWISE
DO
STRING_Positive='OK'
STRING_Negative='Cancel'
STRING_Dismiss='Dismiss'
STRING_BAsmFailure_Title='BAsm error report'
ERROR_NoSource='No source available!'
ERROR_NoBAsm="'"||BAsmPath||BAsmName||"' couldn't be found!"
ERROR_BAsmWarnings='Assembly finished with warnings.'
ERROR_BASM_UnknownErrorCode='An unknown error occurred!'
ERROR_BASM_OK='Assembly successfully finished.'
ERROR_BASM_False='Assembly stopped due to errors!'
ERROR_BASM_OpenError='Open file error during assembly'
ERROR_BASM_SourceError='A source file is NOT ASCII!'
ERROR_BASM_ReadError='Read file error during assembly!'
ERROR_BASM_UnknownOption='Unknown BAsm option(s) supplied: '||BAsmOptions||'!'
ERROR_BASM_MemoryError='Not enough memory to finish assembly!'
ERROR_BASM_NoSourceFile='No source file specified!'
END
END
/*============================================================================*/
/*
** Finally do something
*/
ADDRESS VALUE Port_GoldEd
'QUERY ANYTEXT'
IF ~ (RESULT='TRUE') THEN
/*
** PATH: No source available
*/
DO
'REQUEST TITLE="'||STRING_ThisScript||'" BODY="'||ERROR_NoSource||'" BUTTON="'||STRING_Dismiss||'"'
END
ELSE
/*
** PATH: Assemble source
*/
DO
/*==== Save if file source modified ====*/
ADDRESS VALUE Port_GoldEd
'QUERY MODIFY'
IF (RESULT='TRUE') THEN 'SAVE SMART ALL'
'QUERY FILE'
Filename_Source=RESULT
'QUERY DOC'
Pathname_Source=RESULT
/*==== checking presence of BAsm ====*/
RemoveBAsmAfterProcessing = FALSE /* indicates wether BAsm is to remove after processing (e.g. because it was not existent before) */
IF Filename_Source = '' THEN
DO
'REQUEST TITLE="'||STRING_ThisScript||'" BODY="'||ERROR_NoSource||'" BUTTON="'||STRING_Dismiss||'"'
END
ELSE
DO
IF ~ SHOW('P', Port_BAsm) THEN /* is BAsm AREXX port available ? */
DO
ADDRESS COMMAND LaunchCmd||' '||BAsmPath||BAsmName||' '||BAsmStartup /* no, launch BAsm */
IF RC = 0 THEN
DO /* no error occured ? */
RemoveBAsmAfterProcessing = TRUE /* BAsm had to be loaded, so it must be removed after processing */
ADDRESS COMMAND WaitForPort Port_BAsm
END
ELSE
DO
ADDRESS VALUE Port_GoldEd
'REQUEST TITLE="'||STRING_ThisScript||'" BODY="'||ERROR_NoBAsm||'" BUTTON="'||STRING_Dismiss||'"'
EXIT 0
END
END
IF ~ SHOW('P', Port_BAsm) THEN /* is BAsm running ? */
DO
ADDRESS VALUE Port_GoldEd
'REQUEST TITLE="'||STRING_ThisScript||'" BODY="'||ERROR_NoBAsm||'" BUTTON="'||STRING_Dismiss||'"'
END
ELSE
DO
ADDRESS VALUE Port_BAsm /* Hey, BAsm, listen to your master */
/*==== remote control BAsm now ====*/
OPTIONS FAILAT BAsmError_Max
'BASM -e+ -es- '||BAsmOptions||' '||PathName_Source
ADDRESS VALUE Port_GoldEd
SELECT
WHEN RC = BAsmError_OpenError THEN
'REQUEST TITLE="'||STRING_BAsmFailure_Title'" BODY="'||ERROR_BASM_OpenError||'" BUTTON="'||STRING_Dismiss||'"'
WHEN RC = BAsmError_SourceError THEN
'REQUEST TITLE="'||STRING_BAsmFailure_Title'" BODY="'||ERROR_BASM_SourceError||'" BUTTON="'||STRING_Dismiss||'"'
WHEN RC = BAsmError_ReadError THEN
'REQUEST TITLE="'||STRING_BAsmFailure_Title'" BODY="'||ERROR_BASM_ReadError||'" BUTTON="'||STRING_Dismiss||'"'
WHEN RC = BAsmError_UnknownOption THEN
'REQUEST TITLE="'||STRING_BAsmFailure_Title'" BODY="'||ERROR_BASM_UnknownOption||'" BUTTON="'||STRING_Dismiss||'"'
WHEN RC = BAsmError_MemoryError THEN
'REQUEST TITLE="'||STRING_BAsmFailure_Title'" BODY="'||ERROR_BASM_MemoryError||'" BUTTON="'||STRING_Dismiss||'"'
WHEN RC = BAsmError_NoSourceFile THEN
'REQUEST TITLE="'||STRING_BAsmFailure_Title'" BODY="'||ERROR_BASM_NoSourceFile||'" BUTTON="'||STRING_Dismiss||'"'
WHEN RC = BAsmError_False THEN
DO
'REQUEST TITLE="'||STRING_BAsmFailure_Title'" BODY="'||ERROR_BASM_False||'" BUTTON="'||STRING_Dismiss||'"'
/*---- call Error display routine ----*/
ADDRESS COMMAND 'SYS:RexxC/rx '||NextError||' '||Port_GoldEd
END
WHEN RC = BAsmError_OK THEN
DO
ADDRESS VALUE Port_BAsm
'BINITWARNING'
IF (RC = BAsmError_NoWarningList) THEN
DO
ADDRESS VALUE Port_GoldEd
'REQUEST TITLE="'||STRING_BAsmFailure_Title'" BODY="'||ERROR_BASM_OK||'" BUTTON="'||STRING_Positive||'"'
END
ELSE
DO
ADDRESS VALUE Port_GoldEd
'REQUEST TITLE="'||STRING_BAsmFailure_Title'" BODY="'||ERROR_BAsmWarnings||'" BUTTON="'||STRING_Dismiss||'"'
/*---- call Error display routine ----*/
ADDRESS COMMAND 'SYS:RexxC/rx '||NextError||' '||Port_GoldEd
END
END
OTHERWISE
'REQUEST TITLE="'||STRING_BAsmFailure_Title'" BODY="'||ERROR_BASM_UnknownErrorCode||'" BUTTON="'||STRING_Dismiss||'"'
OPTIONS FAILAT ScriptErrorLevel
END
/*
IF (RemoveBAsmAfterProcessing = TRUE) THEN
DO
ADDRESS VALUE Port_BAsm
'BEND'
END
*/
END
END
END
/*=============================================================================*/
ADDRESS VALUE Port_GoldEd
'UNLOCK' /* VERY important: unlock GUI */
END /* IF ~ SHOW('P', Port_GoldEd) */
EXIT
SYNTAX:
SAY "Sorry, error line" SIGL ":" ERRORTEXT(RC) ":-("
ADDRESS VALUE Port_GoldEd
'REQUEST TITLE="'||STRING_ThisScript||'" BODY="Script error!" BUTTON="Who is bad?"'
'UNLOCK'
EXIT
/*=============================================================================*/
/*
** version history:
** ---------------
**
** V1.0 : -first public version
**
** known bugs in the latest version/revision:
** -----------------------------------------
** - Not a bug of this script but BAsm:
** BAsm should return an error value when calling
** BINITERROR/BINITWARNING while the appropriate
** list is not available. BAsm though doesn't do
** this. Therefore it is possible, that warnings
** after assembly are announced, while none occured.
**
*/